package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	/// 创建OSSClient实例。
	// yourEndpoint填写Bucket对应的Endpoint，以华东1（杭州）为例，填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	// yourAccessKeyId和yourAccessKeySecret填写RAM用户的访问密钥（AccessKey ID和AccessKey Secret）。
	client, err := oss.New("https://oss-cn-beijing.aliyuncs.com", "LTAI5tDU7aEg3mAzZB9P1ezz", "w3B4eMEZ9NODkNrNxIGzclb4Sm6jiR")
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// 填写Bucket名称，例如examplebucket。
	bucketNames := []string{"wenwo-static-pro", "ww-v-out", "wenwo-file-bucket-prd", "wenwo-public-video", "wenwo-audio-bucket-prd", "wenwo-img-bucket-prd", "wenwo-office-bucket-prd", "ww-v-src"}
	for _, bucketName := range bucketNames {
		/*
			// 查看CNAME记录。
			cnResult, err := client.ListBucketCname(bucketName)
			if err != nil {
				fmt.Println("Error:", err)
				fmt.Println()
				//os.Exit(-1)
			}
			if len(cnResult.Cname) > 0 {
				for _, cnameInfo := range cnResult.Cname {
					fmt.Printf("Bucket:%s\n", cnResult.Bucket)
					// 打印自定义域名。
					fmt.Printf("Domain:%s\n", cnameInfo.Domain)
					// 打印域名所处状态。
					fmt.Printf("Status:%s\n\n", cnameInfo.Status)
				}
			}

			// 获取跨域资源共享规则。
			corsRes, err := client.GetBucketCORS(bucketName)
			if err != nil {
				fmt.Println("Error:", err)
				fmt.Println()
				//os.Exit(-1)
			}
			for _, rule := range corsRes.CORSRules {
				fmt.Printf("来源 Origin:%s\n", rule.AllowedOrigin)
				fmt.Printf("操作 Methods:%s\n", rule.AllowedMethod)
				fmt.Printf("Allow-Headers:%s\n", rule.AllowedHeader)
				fmt.Printf("Expose-Headers:%s\n", rule.ExposeHeader)
				fmt.Printf("超时 Max-Age:%d\n\n", rule.MaxAgeSeconds)
			}
			if corsRes.ResponseVary != nil {
				fmt.Printf("返回 Vary: Origin:%t\n", *corsRes.ResponseVary)
			}
		*/

		// 指定查询最后更新时间在2023年12月01日至2024年03月31日范围内的文件。
		query := oss.MetaQuery{
			NextToken:  "",
			MaxResults: 100,
			Query: `{
  "SubQueries":[
    {
      "Field":"FileModifiedTime",
      "Value": "2024-05-27T12:00:00.000+08:00",
      "Operation":"gt"
    },         
    {
      "Field":"FileModifiedTime",
      "Value": "2024-05-28T23:59:59.000+08:00",
      "Operation":"lt"
    }
  ],
  "Operation":"and"
}`,
			// 指定返回结果按文件名升序排列。
			Sort:  "Filename",
			Order: "asc",
		}
		// 查询满足指定条件的Object，并按照指定字段和排序方式列举Object信息。
		result, err := client.DoMetaQuery(bucketName, query)
		if err != nil {
			fmt.Println("Error:", err)
			os.Exit(-1)
		}
		fmt.Printf("NextToken:%s\n", result.NextToken)
		for _, file := range result.Files {
			fmt.Printf("File name: %s\n", file.Filename)
			fmt.Printf("size: %d\n", file.Size)
			fmt.Printf("File Modified Time:%s\n", file.FileModifiedTime)
			fmt.Printf("Oss Object Type:%s\n", file.OssObjectType)
			fmt.Printf("Oss Storage Class:%s\n", file.OssStorageClass)
			fmt.Printf("Object ACL:%s\n", file.ObjectACL)
			fmt.Printf("ETag:%s\n", file.ETag)
			fmt.Printf("Oss CRC64:%s\n", file.OssCRC64)
			fmt.Printf("Oss Tagging Count:%d\n", file.OssTaggingCount)
			for _, tagging := range file.OssTagging {
				fmt.Printf("Oss Tagging Key:%s\n", tagging.Key)
				fmt.Printf("Oss Tagging Value:%s\n", tagging.Value)
			}
			for _, userMeta := range file.OssUserMeta {
				fmt.Printf("Oss User Meta Key:%s\n", userMeta.Key)
				fmt.Printf("Oss User Meta Key Value:%s\n", userMeta.Value)
			}
		}
	}
}
